package br.ufpi.repositories;

import java.util.List;

import br.ufpi.model.User;

public interface UserRepository {
	/*
	 * Delete the methods you don't want to expose
	 */

	void create(User entity);

	User update(User entity);

	void destroy(User entity);

	User find(Long id);

	User load(User User);

	List<User> findAll();

	/**
	 * Procura um User pelo email.
	 * 
	 * @param email
	 *            Email de um User
	 * @return User que possui email igual
	 */
	User findEmail(String email);

	/**
	 * Procura um User pelo login que é tanto o nickname quanto o email.
	 * 
	 * @param nickName
	 * @return User que possui nickName igual
	 */
	User findLogin(String login);

	/**
	 * Procura um User pelo login.
	 * 
	 * @param nickName
	 * @return User que possui nickName igual
	 */
	User findNickName(String nickName);

	/**
	 * procura User que possui Email e senha igual ao passado.
	 * 
	 * @param login
	 * @param password
	 * @return User que possui o email e senha passado como paramentro. Se User
	 *         não encontrado retorna null.
	 */
	User logar(String login, String password);

	/**
	 * Procura por User que possui confirmação de email igual a repassada.
	 * 
	 * @param confirmationEmail
	 * @return User que possui confirmação de email igual ao passado. Se não
	 *         tiver User retorna null.
	 */
	User findConfirmationEmail(String confirmationEmail);

	/**
	 * Analisa se no banco de dados contem o email inserido.
	 * 
	 * @param email
	 *            Email que esta procurando.
	 * @return True se contem o email busacado
	 */
	boolean isContainsEmail(String email);

	/**
	 * Analisa se no banco de dados contem o email inserido.
	 * 
	 * @param email
	 *            Email que esta procurando.
	 * @return True se contem o email busacado
	 */
	boolean isContainsLogin(String login);

	boolean isContainTokenActive(String containsTokenActive);

	User findTokenActive(String tokenActive);

}
